package main

import (
	"gitee.com/cristiane/go-common/json"
	"log"
)

// 反转一个单链表。
//输入: 1->2->3->4->5->NULL
//输出: 5->4->3->2->1->NULL

type ListNode struct {
	Val  int
	Next *ListNode
}

func main() {
	list := &ListNode{
		Val: 1,
		Next: &ListNode{
			Val: 2,
			Next: &ListNode{
				Val: 3,
				Next: &ListNode{
					Val: 4,
					Next: &ListNode{
						Val:  5,
						Next: nil,
					},
				},
			},
		},
	}
	log.Println(json.MarshalToStringNoError(reverseListPlus(list)))
}

func reverseListPlus(head *ListNode) *ListNode {
	var pre *ListNode = nil
	var cur = head
	var tmp *ListNode = nil
	for cur != nil {
		// 保存当前节点的next
		tmp = cur.Next
		// 将pre节点指向当前节点的next
		cur.Next = pre
		// pre节点指向当前节点
		pre = cur
		// 当前节点指向当前节点的next
		cur = tmp
	}
	return pre
}
